/**
 * 给你一个 升序排列 的数组 nums ，请你 原地 删除重复出现的元素，使每个元素 只出现一次 ，返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
 *
 * 考虑 nums 的唯一元素的数量为 k ，你需要做以下事情确保你的题解可以被通过：
 *
 * 更改数组 nums ，使 nums 的前 k 个元素包含唯一元素，并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
 * 返回 k 。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/remove-duplicates-from-sorted-array
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * */
fun main() {
//    val intArray = intArrayOf(0, 0, 1, 1, 1, 2, 2, 3, 3, 4)
//    val intArray = intArrayOf(1, 1, 1, 2, 3)
//    val intArray = intArrayOf(1, 1)
//    val intArray = intArrayOf(1, 1, 2)
    val intArray = intArrayOf(1, 1, 2,3)
//    val intArray = intArrayOf(1, 1, 2, 2)
//    println(e3(intArray))
//    println(answer(intArray))
    println(answer2(intArray))
    println(intArray.contentToString())
}
//j指向可以替换的位置，可以把不重复的数字往前放
fun answer2(nums: IntArray): Int {
    val size = nums.size
    if (size < 2) return size
    var j = 0
    //1123->1223->1233
    //123
    //11123->12123->12323
    for (i in 0 until size) {
        if (nums[j] != nums[i]) nums[++j] = nums[i]
    }
    return ++j
}

fun answer(nums: IntArray): Int {
    var i = 0
    var j = 1
    while (j < nums.size) {
        if (nums[i] == nums[j]) {
            j++
        } else {
            i++
            nums[i] = nums[j]
            j++
        }
    }
    return i + 1
}

//1,1,1,2,3
//11123->12223->12
//1122->1222->
fun e3(nums: IntArray): Int {
    var k = 0
    var mark = -1
    val size = nums.size
    for (num in nums) {
        k++
        println("k:$k")
        if (k < size) {
            if (num == nums[k]) {
                for (i in k until size) {
                    if (nums[k] != nums[i]) {
                        for (i2 in k until i) {
                            nums[i2] = nums[i]
//                        println(nums.contentToString())
//                        println("k:$k")
                        }
                        break
                    } else if (i + 1 == size) {
                        val i = nums[size - 1]
                        for (num in nums) {
                            if (num == i) mark++
                        }
                        return size - mark
                    }
                }
            }
        }
        println(nums.contentToString())
    }
    return 1
}